home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / com32 / lib / lrand48.c < prev    next >
Encoding:
C/C++ Source or Header  |  2004-11-10  |  699 b   |  43 lines

  1. /*
  2.  * lrand48.c
  3.  */
  4.  
  5. #include <stdlib.h>
  6. #include <stdint.h>
  7.  
  8. unsigned short __rand48_seed[3];
  9.  
  10. long jrand48(unsigned short xsubi[3])
  11. {
  12.   uint64_t x;
  13.  
  14.   /* The xsubi[] array is littleendian by spec */
  15.   x = (uint64_t)xsubi[0] +
  16.     ((uint64_t)xsubi[1] << 16) +
  17.     ((uint64_t)xsubi[2] << 32);
  18.  
  19.   x = (0x5deece66dULL * x) + 0xb;
  20.   
  21.   xsubi[0] = (unsigned short)x;
  22.   xsubi[1] = (unsigned short)(x >> 16);
  23.   xsubi[2] = (unsigned short)(x >> 32);
  24.  
  25.   return (long)(int32_t)(x >> 16);
  26. }
  27.  
  28. long mrand48(void)
  29. {
  30.   return jrand48(__rand48_seed);
  31. }
  32.  
  33. long nrand48(unsigned short xsubi[3])
  34. {
  35.   return (long)((uint32_t)jrand48(xsubi) >> 1);
  36. }
  37.  
  38. long lrand48(void)
  39. {
  40.   return (long)((uint32_t)(mrand48() >> 1));
  41. }
  42.  
  43.